//+------------------------------------------------------------------+ //| Color Stochastic.mq4 | //| mladen | //| | //+------------------------------------------------------------------+ #property copyright "mladen" #property link "" #property indicator_separate_window #property indicator_buffers 4 #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_color1 DimGray #property indicator_style1 STYLE_DOT #property indicator_color2 DimGray #property indicator_color3 Lime #property indicator_color4 Red #property indicator_width3 2 #property indicator_width4 2 //---- input parameters // // nice setings for trend = 35,10,1 // // extern string note1 = "Stochastic settings"; extern int KPeriod = 30; extern int Slowing = 10; extern int DPeriod = 10; extern string note4 = "0=sma, 1=ema, 2=smma, 3=lwma"; extern int MAMethod = 0; extern string note5 = "0=high/low, 1=close/close"; extern int PriceField = 1; extern string note6 = "overbought level"; extern int overBought = 80; extern string note7 = "oversold level"; extern int overSold = 20; //---- buffers // // // // // double KFull[]; double DFull[]; double Upper[]; double Lower[]; string DR; double avg.rng, rng, sum.rng; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,DFull); SetIndexBuffer(1,KFull); SetIndexBuffer(2,Upper); SetIndexBuffer(3,Lower); SetIndexLabel(1,"Fast"); SetIndexLabel(2,NULL); SetIndexLabel(3,NULL); // // // // // DPeriod = MathMax(DPeriod,1); if (DPeriod==1) { SetIndexStyle(0,DRAW_NONE); SetIndexLabel(0,NULL); } else { SetIndexStyle(0,DRAW_LINE); SetIndexLabel(0,"Slow"); } // // // // // string shortName = "Stochastic ("+KPeriod+","+Slowing+","+DPeriod+","+maDescription(MAMethod)+","+priceDescription(PriceField); if (overBought < overSold) overBought = overSold; if (overBought < 100) shortName = shortName+","+overBought; if (overSold > 0) shortName = shortName+","+overSold; IndicatorShortName(shortName+")"); return(0); } // // // // // int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int limit; int i; if(counted_bars<0) return(-1); limit=Bars-counted_bars; // // // // // for(i=limit; i>=0; i--) { KFull[i] = iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MAMethod,PriceField,MODE_MAIN,i); DFull[i] = iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MAMethod,PriceField,MODE_SIGNAL,i); // // // // // if (KFull[i] > overBought) { Upper[i] = KFull[i]; Upper[i+1] = KFull[i+1]; } else { Upper[i] = EMPTY_VALUE; if (Upper[i+2] == EMPTY_VALUE) Upper[i+1] = EMPTY_VALUE; } if (KFull[i] < overSold) { Lower[i] = KFull[i]; Lower[i+1] = KFull[i+1]; } else { Lower[i] = EMPTY_VALUE; if (Lower[i+2] == EMPTY_VALUE) Lower[i+1] = EMPTY_VALUE; } } // // // // // Pivot.Plot(); Daily.Range(); comments(); return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ string priceDescription(int mode) { string answer; switch(mode) { case 0: answer = "Low/High" ; break; case 1: answer = "Close/Close" ; break; default: answer = "Invalid price field requested"; Alert(answer); } return(answer); } string maDescription(int mode) { string answer; switch(mode) { case MODE_SMA: answer = "SMA" ; break; case MODE_EMA: answer = "EMA" ; break; case MODE_SMMA: answer = "SMMA" ; break; case MODE_LWMA: answer = "LWMA" ; break; default: answer = "Invalid MA mode requested"; Alert(answer); } return(answer); } //+------------------------------------------------------------------+ void Pivot.Plot() { string t1,t2,PPn,s1n,s2n,r1n,r2n,LOPS1n,LOPS2n,HOPS1n,HOPS2n; double PP,s1,s2,r1,r2,LOPS1,LOPS2,HOPS1,HOPS2,H,L,C; PPn="PP "+TimeToStr(CurTime(),TIME_DATE); s1n="S1 "+TimeToStr(CurTime(),TIME_DATE); s2n="S2 "+TimeToStr(CurTime(),TIME_DATE); r1n="R1 "+TimeToStr(CurTime(),TIME_DATE); r2n="R2 "+TimeToStr(CurTime(),TIME_DATE); LOPS1n="LOPS1 "+TimeToStr(CurTime(),TIME_DATE); LOPS2n="LOPS2 "+TimeToStr(CurTime(),TIME_DATE); HOPS1n="HOPS1 "+TimeToStr(CurTime(),TIME_DATE); HOPS2n="HOPS2 "+TimeToStr(CurTime(),TIME_DATE); H=iHigh(Symbol(),PERIOD_D1,1); L=iLow(Symbol(),PERIOD_D1,1); C=iClose(Symbol(),PERIOD_D1,1); LOPS1=iLow(Symbol(),PERIOD_D1,1); LOPS2=iLow(Symbol(),PERIOD_D1,2); HOPS1=iHigh(Symbol(),PERIOD_D1,1); HOPS2=iHigh(Symbol(),PERIOD_D1,2); t1=TimeToStr(CurTime(),TIME_DATE)+" 00:00:00"; t2=TimeToStr(CurTime(),TIME_DATE)+" 23:59:59"; PP=NormalizeDouble((H+L+C)/3,Digits); s1=NormalizeDouble((PP*2)-H,Digits); r1=NormalizeDouble((PP*2)-L,Digits); s2=NormalizeDouble(PP-(r1-s1),Digits); r2=NormalizeDouble(PP+(r1-s1),Digits); ObjectCreate(PPn,OBJ_TREND,0,StrToTime(t1),PP,StrToTime(t2),PP); ObjectSet(PPn,10,false); ObjectSet(PPn,6,Gray); ObjectSet(PPn,7,STYLE_DOT); ObjectSet(PPn,9,true); ObjectCreate(s1n,OBJ_TREND,0,StrToTime(t1),s1,StrToTime(t2),s1); ObjectSet(s1n,10,false); ObjectSet(s1n,6,LightCoral); ObjectSet(s1n,7,STYLE_DOT); ObjectSet(s1n,9,true); ObjectCreate(s2n,OBJ_TREND,0,StrToTime(t1),s2,StrToTime(t2),s2); ObjectSet(s2n,10,false); ObjectSet(s2n,6,Tomato); ObjectSet(s2n,7,STYLE_DOT); ObjectSet(s2n,9,true); ObjectCreate(r1n,OBJ_TREND,0,StrToTime(t1),r1,StrToTime(t2),r1); ObjectSet(r1n,10,false); ObjectSet(r1n,6,LightGreen); ObjectSet(r1n,7,STYLE_DOT); ObjectSet(r1n,9,true); ObjectCreate(r2n,OBJ_TREND,0,StrToTime(t1),r2,StrToTime(t2),r2); ObjectSet(r2n,10,false); ObjectSet(r2n,6,SpringGreen); ObjectSet(r2n,7,STYLE_DOT); ObjectSet(r2n,9,true); ObjectCreate(LOPS1n,OBJ_TREND,0,StrToTime(t1),LOPS1,StrToTime(t2),LOPS1); ObjectSet(LOPS1n,10,false); ObjectSet(LOPS1n,6,LightGreen); ObjectSet(LOPS1n,7,STYLE_DASH); ObjectSet(LOPS1n,9,true); ObjectCreate(LOPS2n,OBJ_TREND,0,StrToTime(t1),LOPS2,StrToTime(t2),LOPS2); ObjectSet(LOPS2n,10,false); ObjectSet(LOPS2n,6,SpringGreen); ObjectSet(LOPS2n,7,STYLE_DASH); ObjectSet(LOPS2n,9,true); ObjectCreate(HOPS1n,OBJ_TREND,0,StrToTime(t1),HOPS1,StrToTime(t2),HOPS1); ObjectSet(HOPS1n,10,false); ObjectSet(HOPS1n,6,LightCoral); ObjectSet(HOPS1n,7,STYLE_DASH); ObjectSet(HOPS1n,9,true); ObjectCreate(HOPS2n,OBJ_TREND,0,StrToTime(t1),HOPS2,StrToTime(t2),HOPS2); ObjectSet(HOPS2n,10,false); ObjectSet(HOPS2n,6,Tomato); ObjectSet(HOPS2n,7,STYLE_DASH); ObjectSet(HOPS2n,9,true); if(Period()>=1440) {ObjectDelete(PPn); ObjectDelete(s1n); ObjectDelete(s2n); ObjectDelete(r1n); ObjectDelete(r2n); ObjectDelete(LOPS1n);ObjectDelete(LOPS2n);ObjectDelete(HOPS1n); ObjectDelete(HOPS2n); }} double Daily.Range() { if(DR==TimeToStr(CurTime(),TIME_DATE)) {return(NormalizeDouble(avg.rng,Digits));} //Print(DR," ",NormalizeDouble(avg.rng,Digits)); rng=0;sum.rng=0;avg.rng=0; for(int i=0;i0) string swap="longs,"; else swap="shorts."; if(MarketInfo(Symbol(),MODE_SWAPLONG)<0 && MarketInfo(Symbol(),MODE_SWAPSHORT)<0) swap="your broker, :("; Comment("Last Tick: ",TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),"\n", "Swap favors ",swap, " Swap Long ",MarketInfo(Symbol(),MODE_SWAPLONG), ", Swap Short ",MarketInfo(Symbol(),MODE_SWAPSHORT),"\n", "Average Daily Range: ",NormalizeDouble(avg.rng,Digits),"\n", "Current Spread: ",Ask-Bid); }